﻿#ifndef FORMREALTIMEPLOT_H
#define FORMREALTIMEPLOT_H

#include <QWidget>
#include <QSettings>

#include "datastruct.h"
#include "config/jsonconfig.h"
#include "qcustomplot/qcustomplot.h"

namespace Ui {
class FormRealtimePlot;
}

class FormRealtimePlot : public QWidget
{
    Q_OBJECT

public:
    explicit FormRealtimePlot(QSettings* settings, JsonConfig* jsonConfig, QWidget *parent = nullptr);
    ~FormRealtimePlot();

    // 设置通道系数
    void setChannelCoefficient(const QList<double>& coefficientList);
    // 添加曲线
    void updatePlot(const QList<QPair<QString, QString>>& pairList);
    // 清空曲线数据
    void clear(bool onlyData = false);
    // 最后一次原始曲线
    void showLastPlot(const QList<ChannelDescription>& channelDescriptionList);

private:
    void initUI();
    void initPlot();
    void init();
    bool findLastFile(QString& fileName);
    void readDataFile(const QString& filename, QList<QByteArray>& bufferList);
    void fetchChannelValue(const QList<ChannelDescription>& channelDescriptionList, const QList<QByteArray>& bufferList, QList<QVariantList>& valueList);

private:
    Ui::FormRealtimePlot *ui;

    // 曲线图表
    QWidget* m_wgtPlot;
    QCustomPlot* m_plot;

private:
    // INI配置文件
    QSettings* m_settings;
    // JSON配置文件
    JsonConfig* m_jsonConfig;

    // X轴的范围限制
    double m_xSize;
    // X轴计数
    double m_xValue;

    // 通道系数
    QMap<QString, double> m_channelCoefficientMap;
    // 通道ID, 和图表曲线一一对应
    QStringList m_channels;

    // 曲线数据刷新时间控制
    QTime m_refreshTime;

    // 存盘路径
    QString m_savePath;

private slots:
    void onPlotContextMenu(const QPoint &pos);

public slots:
    void onRefreshPlot();
};

#endif // FORMREALTIMEPLOT_H
